<!-- 
    一.前端的概述
        1.前端的概念：用户可见的(所有用户可以直接看见并交互的界面)，浏览器端，客户端.
        2.JavaScript的概念：JavaScript是一种轻量级(简洁)、解释型(无需编译环境,依靠浏览器解释)的Web开发脚本语言。
        3.前端核心工作组成
            - 数据渲染（根据数据设计html结构，渲染页面，展示页面）
            - 用户体验（网页效果，表单验证，其他功能）
            - 性能优化（精灵图，懒加载 ，代码的压缩合并，图片的压缩合并，css的预编译）
        4.JavaScript的组成部分
            - 核心（ECMAScript）：描述了该语言的语法和基本对象（es5/es6）
            - 文档对象模型（DOM）：描述处理网页内容的方法和接口。
            - 浏览器对象模型（BOM）：描述与浏览器进行交互的方法和接口。

    二.变量
        1.变量的概念
            - 就是特定时间用于保存特定值的一个名字而已
        2.变量的特点
            - 写入内存
            - 变量的值是可以改变
            - 可以同时定义多个，逗号分隔
            - 变量提升，输出undefined
            - 松散类型 - 声明时无需关注类型。
        3.变量的命名
            - 驼峰命名
            - 见名知意
        4.变量的数据类型
            - 基本数据类型：number/string/boolean/null/undefined
            - 引用数据类型：object
            - typeof 检测变量的数据类型
        5.变量不同类型之间的转换
            - 显式转换：Number()/String()/Boolean()/parseInt()/parseFloat()/isNaN()
            - 隐式转换：+ - * / % ++ -- ! ==
        
    三.运算符
        - 赋值运算符和复合的赋值运算符：= += 
        - 数学运算符：+ %
        - 比较运算符：> < >= <= == === != !==
        - 逻辑运算符：&& || !
        - 一元运算符：++ --
        - 三目运算符：?: 

    四.类,对象,属性,方法的概念和特点 - 重点


    五.逻辑分支语句和循环语句
        - if语句的三种结构和三个特点.
            - 三种结构：单分支,双分支,多分支。
            - if的条件可以是任意的表达式，任意值，但结果一定是布尔值(系统强制转换)。
            - else可以省略(短路操作)。
            - 尽量将最大的可能给if。
        - switch语句的结构和四个特点(理解switch语句里面的四个关键字).
            - 恒等(适合多分支)
            - case向下穿透力
            - break跳出分支
            - default的其他情况,可以省略
        - while和for循环的结构和使用.
            - 循环的特点：重复,规律。
            - 循环的嵌套：外层循环一次，内层循环完成。
            - 循环的结果是一次性出现的。
    六.debug错误处理
        - 熟悉常见的四种错误类型
        - 理解如何处理程序中出现的bug

    七.函数
        1.函数的概念和特点
        函数实际上是对象,同时也是对象的构造器。由于函数是对象，因此函数名实际上也是一个指向函数对象的指针
        普通函数可以封装任意多条语句， 而且可以在任何地方、任何时候调用执行 - 预解析
        函数是用来帮助我们封装、重用、扩展及调用代码的最方便的工具！
        typeof 函数   ----  function
        声明的函数如果不调用，函数相当于不存在。通过调用找函数

        2.函数的种类
        普通函数 - 有名称的函数
        函数表达式(函数体赋值给变量，自执行函数，事件处理函数)
        递归函数：函数调用函数自身

        3.函数的参数和返回值。
        函数的参数包括形参和实参
        函数不介意传递进来多少参数，也不会因为参数不统一而错误。函数体内可以通过arguments 对象来接收传递进来的参数。
        函数的参数相当于函数内部的局部变量(如果函数的参数没有传值,结果就是undefined)

        函数的返回值
        函数都有一条return语句，return语句导致函数停止执行，并返回它的表达式的值给调用者。 如果return语句没有相关的表达式，则返回undefined
        function fn(){
            console.log('123')
        }

        fn();//执行函数
        console.log(fn());//执行函数，并且返回函数的结果

        4.作用域的概念
        作用域指的是变量和函数可以访问的范围
        全局作用域：函数外面的作用域
        局部作用域：函数里面的作用域

        作用域链的概念：
        当执行函数时，总是先从函数内部找寻局部变量如果内部找不到(函数的局部作用域没有)，则会向创建函数的作用域(声明函数的作用域)寻找，依次向上查找.


        5.JS的编译和执行
        第一阶段(预编译期)
        - 先找var和function关键字，如果找到var关键字，提前赋值undefined给变量名.  如果找到function，提前将整个函数赋值给函数名称。
        - 如果函数和变量出现重名，函数优先。
        - 函数的参数类似于变量，函数内部同样做预解析，支持预解析。

        第二阶段(执行期)：在编译后的基础上开始从上到下执行脚本，遇到错误时中断。
        - 正常情况下(排除if、for)，普通函数声明跳过，变量声明未初始化跳过。
 -->
<script>
    function fn() {
        console.log('123')
    }
    fn(); //执行函数
    console.log(fn()); //执行函数，并且返回函数的结果
</script>